From a4c0c06275889ea4231a4fccd1180e6ab5907428 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Thu, 21 Jul 2016 01:25:46 +0300 Subject: [PATCH] Coalesce config.rustc and config.rustc_info --- src/bin/cargo.rs | 6 ++---- src/cargo/ops/cargo_clean.rs | 2 +- src/cargo/ops/cargo_compile.rs | 2 +- src/cargo/ops/cargo_rustc/context.rs | 4 ++-- src/cargo/ops/cargo_rustc/custom_build.rs | 2 +- src/cargo/ops/cargo_rustc/engine.rs | 2 +- src/cargo/ops/cargo_rustc/fingerprint.rs | 2 +- src/cargo/ops/cargo_rustc/mod.rs | 2 +- src/cargo/ops/cargo_test.rs | 2 +- src/cargo/util/config.rs | 17 ++++++----------- src/cargo/util/rustc.rs | 6 +++++- tests/cargotest/lib.rs | 3 ++- 12 files changed, 24 insertions(+), 26 deletions(-) diff --git a/src/bin/cargo.rs b/src/bin/cargo.rs index effef0490..54abf1427 100644 --- a/src/bin/cargo.rs +++ b/src/bin/cargo.rs @@ -16,7 +16,6 @@ use cargo::core::shell::Verbosity; use cargo::execute_main_without_stdin; use cargo::util::{self, CliResult, lev_distance, Config, human, CargoResult}; use cargo::util::CliError; -use cargo::util::process_builder::process; #[derive(RustcDecodable)] pub struct Flags { @@ -150,9 +149,8 @@ fn execute(flags: Flags, config: &Config) -> CliResult> { } if let Some(ref code) = flags.flag_explain { - try!(process(&*try!(config.rustc())) - .arg("--explain").arg(code).exec() - .map_err(human)); + let mut procss = try!(config.rustc()).process(); + try!(procss.arg("--explain").arg(code).exec().map_err(human)); return Ok(None) } diff --git a/src/cargo/ops/cargo_clean.rs b/src/cargo/ops/cargo_clean.rs index 2938e70cc..a5eba05cb 100644 --- a/src/cargo/ops/cargo_clean.rs +++ b/src/cargo/ops/cargo_clean.rs @@ -33,7 +33,7 @@ pub fn clean(ws: &Workspace, opts: &CleanOptions) -> CargoResult<()> { let packages = ops::get_resolved_packages(&resolve, registry); let profiles = try!(ws.current()).manifest().profiles(); - let host_triple = try!(opts.config.rustc_info()).host.clone(); + let host_triple = try!(opts.config.rustc()).host.clone(); let mut cx = try!(Context::new(ws, &resolve, &packages, opts.config, BuildConfig { host_triple: host_triple, diff --git a/src/cargo/ops/cargo_compile.rs b/src/cargo/ops/cargo_compile.rs index 17539c4d7..78d16365c 100644 --- a/src/cargo/ops/cargo_compile.rs +++ b/src/cargo/ops/cargo_compile.rs @@ -443,7 +443,7 @@ fn scrape_build_config(config: &Config, let cfg_target = try!(config.get_string("build.target")).map(|s| s.val); let target = target.or(cfg_target); let mut base = ops::BuildConfig { - host_triple: try!(config.rustc_info()).host.clone(), + host_triple: try!(config.rustc()).host.clone(), requested_target: target.clone(), jobs: jobs, ..Default::default() diff --git a/src/cargo/ops/cargo_rustc/context.rs b/src/cargo/ops/cargo_rustc/context.rs index c46b9170d..4df862ffd 100644 --- a/src/cargo/ops/cargo_rustc/context.rs +++ b/src/cargo/ops/cargo_rustc/context.rs @@ -8,7 +8,7 @@ use std::sync::Arc; use core::{Package, PackageId, PackageSet, Resolve, Target, Profile}; use core::{TargetKind, Profiles, Metadata, Dependency, Workspace}; use core::dependency::Kind as DepKind; -use util::{self, CargoResult, ChainError, internal, Config, profile, Cfg, human}; +use util::{CargoResult, ChainError, internal, Config, profile, Cfg, human}; use super::TargetConfig; use super::custom_build::{BuildState, BuildScripts}; @@ -166,7 +166,7 @@ impl<'a, 'cfg> Context<'a, 'cfg> { &self.build_config, kind, "RUSTFLAGS")); - let mut process = util::process(&*try!(self.config.rustc())); + let mut process = try!(self.config.rustc()).process(); process.arg("-") .arg("--crate-name").arg("_") .arg("--print=file-names") diff --git a/src/cargo/ops/cargo_rustc/custom_build.rs b/src/cargo/ops/cargo_rustc/custom_build.rs index b0fd0ea5e..071c7079d 100644 --- a/src/cargo/ops/cargo_rustc/custom_build.rs +++ b/src/cargo/ops/cargo_rustc/custom_build.rs @@ -113,7 +113,7 @@ fn build_work<'a, 'cfg>(cx: &mut Context<'a, 'cfg>, unit: &Unit<'a>) .env("OPT_LEVEL", &profile.opt_level.to_string()) .env("PROFILE", if cx.build_config.release {"release"} else {"debug"}) .env("HOST", cx.host_triple()) - .env("RUSTC", &*try!(cx.config.rustc())) + .env("RUSTC", &try!(cx.config.rustc()).path) .env("RUSTDOC", &*try!(cx.config.rustdoc())); if let Some(links) = unit.pkg.manifest().links(){ diff --git a/src/cargo/ops/cargo_rustc/engine.rs b/src/cargo/ops/cargo_rustc/engine.rs index 76f5d3914..ec892392c 100644 --- a/src/cargo/ops/cargo_rustc/engine.rs +++ b/src/cargo/ops/cargo_rustc/engine.rs @@ -41,7 +41,7 @@ impl CommandPrototype { Ok(CommandPrototype { builder: { let mut p = match ty { - CommandType::Rustc => process(&*try!(config.rustc())), + CommandType::Rustc => try!(config.rustc()).process(), CommandType::Rustdoc => process(&*try!(config.rustdoc())), CommandType::Target(ref s) | CommandType::Host(ref s) => process(s), diff --git a/src/cargo/ops/cargo_rustc/fingerprint.rs b/src/cargo/ops/cargo_rustc/fingerprint.rs index d8b62319b..60ff14c2b 100644 --- a/src/cargo/ops/cargo_rustc/fingerprint.rs +++ b/src/cargo/ops/cargo_rustc/fingerprint.rs @@ -352,7 +352,7 @@ fn calculate<'a, 'cfg>(cx: &mut Context<'a, 'cfg>, unit: &Unit<'a>) try!(cx.rustflags_args(unit)) }; let fingerprint = Arc::new(Fingerprint { - rustc: util::hash_u64(&try!(cx.config.rustc_info()).verbose_version), + rustc: util::hash_u64(&try!(cx.config.rustc()).verbose_version), target: util::hash_u64(&unit.target), profile: util::hash_u64(&unit.profile), features: format!("{:?}", features), diff --git a/src/cargo/ops/cargo_rustc/mod.rs b/src/cargo/ops/cargo_rustc/mod.rs index 76f9dc27f..2342352c5 100644 --- a/src/cargo/ops/cargo_rustc/mod.rs +++ b/src/cargo/ops/cargo_rustc/mod.rs @@ -204,7 +204,7 @@ fn rustc(cx: &mut Context, unit: &Unit) -> CargoResult { let name = unit.pkg.name().to_string(); if !cx.show_warnings(unit.pkg.package_id()) { - if try!(cx.config.rustc_info()).cap_lints { + if try!(cx.config.rustc()).cap_lints { rustc.arg("--cap-lints").arg("allow"); } else { rustc.arg("-Awarnings"); diff --git a/src/cargo/ops/cargo_test.rs b/src/cargo/ops/cargo_test.rs index 5eb106b1e..52365c6e6 100644 --- a/src/cargo/ops/cargo_test.rs +++ b/src/cargo/ops/cargo_test.rs @@ -117,7 +117,7 @@ fn run_doc_tests(options: &TestOptions, // We don't build/rust doctests if target != host if let Some(target) = options.compile_opts.target { - if try!(config.rustc_info()).host != target { + if try!(config.rustc()).host != target { return Ok(errors); } } diff --git a/src/cargo/util/config.rs b/src/cargo/util/config.rs index a225b6cfd..2c7d1befb 100644 --- a/src/cargo/util/config.rs +++ b/src/cargo/util/config.rs @@ -24,7 +24,7 @@ use self::ConfigValue as CV; pub struct Config { home_path: Filesystem, shell: RefCell, - rustc_info: RefCell>, + rustc: RefCell>, values: RefCell>, values_loaded: Cell, cwd: PathBuf, @@ -42,7 +42,7 @@ impl Config { let mut cfg = Config { home_path: Filesystem::new(homedir), shell: RefCell::new(shell), - rustc_info: RefCell::new(None), + rustc: RefCell::new(None), cwd: cwd, values: RefCell::new(HashMap::new()), values_loaded: Cell::new(false), @@ -96,11 +96,6 @@ impl Config { self.shell.borrow_mut() } - pub fn rustc(&self) -> CargoResult> { - let rustc = try!(self.rustc_info()); - Ok(Ref::map(rustc, |r| r.path.as_ref())) - } - pub fn rustdoc(&self) -> CargoResult> { if self.rustdoc.borrow().is_none() { *self.rustdoc.borrow_mut() = Some(try!(self.get_tool("rustdoc"))); @@ -108,12 +103,12 @@ impl Config { Ok(Ref::map(self.rustdoc.borrow(), |opt| opt.as_ref().map(AsRef::as_ref).unwrap())) } - pub fn rustc_info(&self) -> CargoResult> { - if self.rustc_info.borrow().is_none() { + pub fn rustc(&self) -> CargoResult> { + if self.rustc.borrow().is_none() { let path = try!(self.get_tool("rustc")); - *self.rustc_info.borrow_mut() = Some(try!(Rustc::new(path))); + *self.rustc.borrow_mut() = Some(try!(Rustc::new(path))); } - Ok(Ref::map(self.rustc_info.borrow(), |opt| opt.as_ref().unwrap())) + Ok(Ref::map(self.rustc.borrow(), |opt| opt.as_ref().unwrap())) } pub fn values(&self) -> CargoResult>> { diff --git a/src/cargo/util/rustc.rs b/src/cargo/util/rustc.rs index 8504e51e2..59a6e17e1 100644 --- a/src/cargo/util/rustc.rs +++ b/src/cargo/util/rustc.rs @@ -1,6 +1,6 @@ use std::path::PathBuf; -use util::{self, CargoResult, internal, ChainError}; +use util::{self, CargoResult, internal, ChainError, ProcessBuilder}; pub struct Rustc { pub path: PathBuf, @@ -49,4 +49,8 @@ impl Rustc { cap_lints: cap_lints, }) } + + pub fn process(&self) -> ProcessBuilder { + util::process(&self.path) + } } diff --git a/tests/cargotest/lib.rs b/tests/cargotest/lib.rs index 7053f4839..ffd094f97 100644 --- a/tests/cargotest/lib.rs +++ b/tests/cargotest/lib.rs @@ -21,11 +21,12 @@ extern crate log; use cargo::util::Rustc; use std::ffi::OsStr; use std::time::Duration; +use std::path::PathBuf; pub mod support; pub mod install; -thread_local!(pub static RUSTC: Rustc = Rustc::new("rustc").unwrap()); +thread_local!(pub static RUSTC: Rustc = Rustc::new(PathBuf::from("rustc")).unwrap()); pub fn rustc_host() -> String { RUSTC.with(|r| r.host.clone()) -- 2.30.2